/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package otcapp.experto;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import otcapp.entidades.Personal;
import otcapp.entidades.TipoPersonal;
import otcapp.entidades.Zona;
import otcapp.experto.excepciones.ABMException;
import otcapp.experto.excepciones.ExpertoConsultarPersonalException;
import otcapp.fabricas.FabricaExpertos;
import persistencia.exceptions.ExcepcionFachada;
import persistencia.Fachada;

/**
 *
 * @author diego
 */
public class ExpertoABMPersonal extends Experto {

    private Personal personalSeleccionado;
    
    public void setPersonalSeleccionado(Personal personalSeleccionado) {
        this.personalSeleccionado = personalSeleccionado;
    }

    public void guardarPersonal(String apellido, String nombre, String legajo, TipoPersonal tipo, Zona zona) throws ABMException {
        if (personalSeleccionado == null) {
            personalSeleccionado = new Personal();
            validarDatosIngresados(apellido, nombre, legajo, tipo, zona);
            Personal pEncontrado = null;
            try {
                pEncontrado = ((ExpertoConsultarPersonal)FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.CONSULTAR_PERSONAL)).buscarPersonalLegajo(legajo);
            } catch (ExpertoConsultarPersonalException ex) {
            }
            if(pEncontrado != null){
                throw new ABMException("Ya hay personal registrado con el legajo ingresado: "+legajo);
            }
        }
        personalSeleccionado.setApellido(apellido);
        personalSeleccionado.setNombre(nombre);
        personalSeleccionado.setLegajo(legajo);
        personalSeleccionado.setTipoPersonal(tipo);
        personalSeleccionado.setZona(zona);
        try {
            Fachada.getInstancia().guardar(personalSeleccionado);
        } catch (ExcepcionFachada ex) {
            throw new ABMException("Error al guardar Personal: " + personalSeleccionado.getApellidoNombre());
        }
        personalSeleccionado = null;
    }
    
    public void validarDatosIngresados(String apellido, String nombre, String legajo, TipoPersonal tipo, Zona zona) throws ABMException {
        boolean lanzarExcepcion = false;
        String mensaje = "Los siguientes campos son incorrectos:";
        if(apellido.length()==0){
            lanzarExcepcion = true;
            mensaje += "\nApellido";
            
        }
        if(nombre.length()==0){
            lanzarExcepcion = true;
            mensaje+="\nNombre";
        }
        if(legajo.length()==0){
            lanzarExcepcion = true;
            mensaje+="\nLegajo";
        }
        if(tipo==null){
            lanzarExcepcion = true;
            mensaje+="\nTipo";
        }
        if(zona==null){
            lanzarExcepcion = true;
            mensaje+="\nZona";
        }
        
        if(lanzarExcepcion){
            throw new ABMException(mensaje);
        }
    }
    
    public List buscarTiposPersonal(){
        Criteria orden = Fachada.getInstancia().crearCriterio(TipoPersonal.class).addOrder(Order.asc("nombreTipo"));
        return Fachada.getInstancia().buscar(TipoPersonal.class, orden);
    }
    
    public List buscarZonas(){
        Criteria orden = Fachada.getInstancia().crearCriterio(Zona.class).addOrder(Order.asc("nombreZona"));
        return Fachada.getInstancia().buscar(Zona.class, orden);
    }
}
